//package com.road.yishi.db.pool;
//
//import java.sql.Connection;
//
//import com.road.yishi.util.DESUtil;
//import com.road.yishi.util.Log;
//import com.road.yishi.util.MD5Security;
//import com.road.yishi.util.NetConfigXml;
//
///**
// * 数据库连接池管理类
// */
//public class ChargeDBPoolMgr {
//	public static String CHARGE_POOL_NAME = "charge";
//	public static final String dbUrl = "jdbc:mysql://%s:%s/%s?characterEncoding=utf-8&autoReconnect=true";
//
//	private static IDBPool chargePool;
//	private static NetConfigXml chargeDBXml;
//
//	private static int mainDBMaxConn = 5;
//	private static int mainDBFllow = 3;
//
//	public static boolean init(NetConfigXml dbXml) {
//		chargeDBXml = dbXml;
//		return initPool(true);
//	}
//
//	private static String getChargeDBUrl() {
//		if (chargeDBXml != null) {
//			return String.format(dbUrl, chargeDBXml.getAddress(), chargeDBXml.getPort(), chargeDBXml.getName());
//		}
//		return "";
//	}
//
//	public static boolean initPool(boolean isInitChargeDB) {
//		if (isInitChargeDB) {
//			chargePool = createPools(CHARGE_POOL_NAME, getChargeDBUrl(), chargeDBXml.getUser(), chargeDBXml.getPassword());
//			if (chargePool == null) {
//				return false;
//			}
//		}
//		return true;
//	}
//
//	/**
//	 * 检查连接池状态是否挂掉，如挂了重新初始化
//	 * 
//	 * @param checkStrategy 是否检查游戏库
//	 * @param checkLog 是否检查日志库
//	 */
//	public static void checkConnectionPool(boolean checkStrategy, boolean checkLog) {
//		boolean initStrategy = false;
//		if (checkStrategy) {
//			if (chargePool == null || chargePool.getCurConns() <= 0) {
//				initStrategy = true;
//				Log.error("检查chargePool发现异常,chargePool:" + getChargePoolState());
//			}
//		}
//
//		if (initStrategy) {
//			boolean result = initPool(initStrategy);
//			StringBuilder sb = new StringBuilder("重新初始化连接池");
//			sb.append(result ? "成功" : "失败").append(",chargePoolState:").append(getChargePoolState());
//			Log.error(sb);
//		}
//	}
//
//	/**
//	 * 根据指定属性创建连接池实例.
//	 * 
//	 * @param props 连接池属性
//	 */
//	private static IDBPool createPools(String poolName, String url, String user, String password) {
//		int maxconn = 10;
//		int maxfllow = 3;
//		if (poolName.equals(CHARGE_POOL_NAME) && mainDBMaxConn > 0 && mainDBFllow > 0) {
//			maxconn = mainDBMaxConn;
//			maxfllow = mainDBFllow;
//		}
//		try {
//			IDBPool pool = new BoneCPDBPool(poolName, url, DESUtil.decrypt(user), DESUtil.decrypt(password), maxconn, maxfllow);
//			String msg = String.format("加载配置连接池:%s,URL:%s完成！", poolName, url);
//			Log.info(msg);
//			return pool;
//		} catch (Exception e) {
//			Log.error("创建db连接池失败 poolName : " + poolName, e);
//			return null;
//		}
//	}
//
//	public static void closePools() {
//		if (chargePool != null) {
//			chargePool.shutdown();
//			chargePool = null;
//		}
//		Log.info("数据库连接池关闭成功");
//	}
//
//	public static void closeChargePools() {
//		if (chargePool != null) {
//			chargePool.shutdown();
//		}
//		Log.info("charge数据库连接池关闭成功");
//	}
//
//	public static Connection getChargeCheckConn() {
//		Connection conn = chargePool.getConnection();
//		return conn;
//	}
//
//	public static String getChargePoolState() {
//		if (chargePool != null) {
//			return chargePool.getState();
//		}
//		return null;
//	}
//
//	public static String md5(String str) {
//		if (str == null)
//			return "";
//		try {
//			return MD5Security.compute(str);
//		} catch (Exception e) {
//			Log.error("MD5加密错误", e);
//		}
//		return "";
//	}
//}
